﻿import clases.dades.Idioma;
import clases.dades.xml.*;
//import clases.dades.menu.Menu;

/**
 * DadesCoral Gestiona tota la carrega dels XMLs relacionats per el tractament
 * del multiidioma
 * 
 * @author JDo
 * @version 1.0
 * @param idioma Definició de tots els idiomes
 */
class clases.dades.coral.DadesCoral extends MovieClip{
	private var PATH_XML:String = "xml/coral/";
	
	private var _idioma    :Array;
	private var _continguts:Object;

	private var _cargaCompletada:Function;
	
	private var xmlMenu           :XMLMenu;
	private var xmlApHistoria     :XMLApGeneric;
	private var xmlApRepertori    :XMLApRepertori;
	private var xmlApComponents   :XMLApComponents;
	private var xmlApOrganitzacio :XMLApGeneric;
	private var xmlApContractacio :XMLApGeneric;
	private var xmlApProvesAcces  :XMLApGeneric;
	private var xmlApDirector     :XMLApGeneric;
	private var xmlApProfessorCant:XMLApGeneric;
	private var xmlApPortada      :XMLApPortada;
	private var xmlApLinks        :XMLApLinks;
	
	/**
	 * Constructor
	 * 
	 * @param $cargaCompletada Funció a creidar quan ham acabat de carregar y tractar tots els XMLs
	 */
	public function DadesCoral($cargaCompletada:Function){
		_cargaCompletada = $cargaCompletada;
		_idioma = new Array();
		initContinguts();
		carregaXMLMenu();
	}
	
	/**
	 * Inicialització dels titpus de dades de la clase
	 */
	private function initContinguts():Void{
		var catala  :Object = new Object();
		var castella:Object = new Object();
		var angles  :Object = new Object();
		
		_continguts          = new Object();
		_continguts.catala   = catala;
		_continguts.castella = castella;
		_continguts.angles   = angles;
	}
	
// --- Menu -----------------------------------------
	/**
	 * Carrega l'XML del menú i quan està carregat i parsejat es crida a menuCarregat
	 * 
	 * @see clases.dades.xml.XMLMenu
	 * @see menuCarregat()
	 */
	private function carregaXMLMenu():Void{
		xmlMenu = new XMLMenu(PATH_XML + "menu.xml", menuCarregat, this);
	}
	
	/**
	 * Ompla les dades d'idioma del menú a l'estructura _continguts quan les tenim disponibles
	 * 
	 * @see carregaXMLMenu()
	 * @param $base Referecia de la crida a la funció per poder accedir als metodes i parametres de la clase
	 */
	private function menuCarregat($base:MovieClip):Void{
		$base._continguts.catala.menu   = $base.xmlMenu.getIdioma(Idioma.CATALA);
		$base._continguts.castella.menu = $base.xmlMenu.getIdioma(Idioma.CASTELLA);
		$base._continguts.angles.menu   = $base.xmlMenu.getIdioma(Idioma.ANGLES);
		
		//trace($base._continguts.angles.menu);
		$base.carregaXMLHistoria();
	}
// **************************************************************

// --- Apartat Historia -----------------------------------------
	/**
	 * Carrega l'XML del apartat historia i quan està carregat i parsejat es crida a historiaCarregat
	 * 
	 * @see clases.dades.xml.XMLApGeneric
	 * @see historiaCarregat()
	 */
	private function carregaXMLHistoria():Void{
		xmlApHistoria = new XMLApGeneric(PATH_XML + "historia.xml", historiaCarregat, this);
	}
	
	/**
	 * Ompla les dades d'idioma del apartat historia a l'estructura _continguts quan les tenim disponibles
	 * 
	 * @see carregaXMLHistoria()
	 * @param $base Referecia de la crida a la funció per poder accedir als metodes i parametres de la clase
	 */
	private function historiaCarregat($base:MovieClip):Void{
		$base._continguts.catala.historia   = $base.xmlApHistoria.getIdioma(Idioma.CATALA);
		$base._continguts.castella.historia = $base.xmlApHistoria.getIdioma(Idioma.CASTELLA);
		$base._continguts.angles.historia   = $base.xmlApHistoria.getIdioma(Idioma.ANGLES);
		
		//trace($base._continguts.castella.historia);
		$base.carregaXMLRepertori();
	}
// ***************************************************************

// --- Apartat Repertori -----------------------------------------
	/**
	 * Carrega l'XML del apartat repertori i quan està carregat i parsejat es crida a repertoriCarregat
	 * 
	 * @see clases.dades.xml.XMLApRepertori
	 * @see repertoriCarregat()
	 */
	private function carregaXMLRepertori():Void{
		xmlApRepertori = new XMLApRepertori(PATH_XML + "repertori.xml", repertoriCarregat, this);
	}
	
	/**
	 * Ompla les dades d'idioma del apartat repertori a l'estructura _continguts quan les tenim disponibles
	 * 
	 * @see carregaXMLRepertori()
	 * @param $base Referecia de la crida a la funció per poder accedir als metodes i parametres de la clase
	 */
	private function repertoriCarregat($base:MovieClip):Void{
		$base._continguts.catala.repertori   = $base.xmlApRepertori.getIdioma(Idioma.CATALA);
		$base._continguts.castella.repertori = $base.xmlApRepertori.getIdioma(Idioma.CASTELLA);
		$base._continguts.angles.repertori   = $base.xmlApRepertori.getIdioma(Idioma.ANGLES);
		
		//trace($base._continguts.angles.repertori);
		$base.carregaXMLComponents();
	}
// ****************************************************************

// --- Apartat Components -----------------------------------------
	/**
	 * Carrega l'XML del apartat components i quan està carregat i parsejat es crida a componentsCarregat
	 * 
	 * @see clases.dades.xml.XMLApComponents
	 * @see componentsCarregat()
	 */
	private function carregaXMLComponents():Void{
		xmlApComponents = new XMLApComponents(PATH_XML + "components.xml", componentsCarregat, this);
	}
	
	/**
	 * Ompla les dades d'idioma del apartat components a l'estructura _continguts quan les tenim disponibles
	 * 
	 * @see carregaXMLComponents()
	 * @param $base Referecia de la crida a la funció per poder accedir als metodes i parametres de la clase
	 */
	private function componentsCarregat($base:MovieClip):Void{
		$base._continguts.catala.components   = $base.xmlApComponents.getIdioma(Idioma.CATALA);
		$base._continguts.castella.components = $base.xmlApComponents.getIdioma(Idioma.CASTELLA);
		$base._continguts.angles.components   = $base.xmlApComponents.getIdioma(Idioma.ANGLES);
		
		//trace($base._continguts.angles.components);
		$base.carregaXMLOrganitzacio();
	}
// ******************************************************************

// --- Apartat Organitzacio -----------------------------------------
	/**
	 * Carrega l'XML del apartat organitzacio i quan està carregat i parsejat es crida a organitzacioCarregat
	 * 
	 * @see clases.dades.xml.XMLApGeneric
	 * @see organitzacioCarregat()
	 */
	private function carregaXMLOrganitzacio():Void{
		xmlApOrganitzacio = new XMLApGeneric(PATH_XML + "organitzacio.xml", organitzacioCarregat, this);
	}

	/**
	 * Ompla les dades d'idioma del apartat organitzacio a l'estructura _continguts quan les tenim disponibles
	 * 
	 * @see carregaXMLOrganitzacio()
	 * @param $base Referecia de la crida a la funció per poder accedir als metodes i parametres de la clase
	 */
	private function organitzacioCarregat($base:MovieClip):Void{
		$base._continguts.catala.organitzacio   = $base.xmlApOrganitzacio.getIdioma(Idioma.CATALA);
		$base._continguts.castella.organitzacio = $base.xmlApOrganitzacio.getIdioma(Idioma.CASTELLA);
		$base._continguts.angles.organitzacio   = $base.xmlApOrganitzacio.getIdioma(Idioma.ANGLES);
		
		//trace($base._continguts.catala.organitzacio);
		$base.carregaXMLContractacio();
	}
// ******************************************************************

// --- Apartat Contractacio -----------------------------------------
	/**
	 * Carrega l'XML del apartat contractacio i quan està carregat i parsejat es crida a contractacioCarregat
	 * 
	 * @see clases.dades.xml.XMLApGeneric
	 * @see organitzacioCarregat()
	 */
	private function carregaXMLContractacio():Void{
		xmlApContractacio = new XMLApGeneric(PATH_XML + "contractacio.xml", contractacioCarregat, this);
	}

	/**
	 * Ompla les dades d'idioma del apartat contractacio a l'estructura _continguts quan les tenim disponibles
	 * 
	 * @see carregaXMLContractacio()
	 * @param $base Referecia de la crida a la funció per poder accedir als metodes i parametres de la clase
	 */
	private function contractacioCarregat($base:MovieClip):Void{
		$base._continguts.catala.contractacio   = $base.xmlApContractacio.getIdioma(Idioma.CATALA);
		$base._continguts.castella.contractacio = $base.xmlApContractacio.getIdioma(Idioma.CASTELLA);
		$base._continguts.angles.contractacio   = $base.xmlApContractacio.getIdioma(Idioma.ANGLES);
		
		//trace($base._continguts.angles.contractacio);
		$base.carregaXMLProvesAcces();
	}
// ******************************************************************

// --- Apartat Proves d'Acces -----------------------------------------
	/**
	 * Carrega l'XML del apartat proves d'acces i quan està carregat i parsejat es crida a provesAccesCarregat
	 * 
	 * @see clases.dades.xml.XMLApGeneric
	 * @see provesAccesCarregat()
	 */
	private function carregaXMLProvesAcces():Void{
		xmlApProvesAcces = new XMLApGeneric(PATH_XML + "provesacces.xml", provesAccesCarregat, this);
	}

	/**
	 * Ompla les dades d'idioma del apartat proves d'acces a l'estructura _continguts quan les tenim disponibles
	 * 
	 * @see carregaXMLProvesAcces()
	 * @param $base Referecia de la crida a la funció per poder accedir als metodes i parametres de la clase
	 */
	private function provesAccesCarregat($base:MovieClip):Void{
		$base._continguts.catala.provesacces   = $base.xmlApProvesAcces.getIdioma(Idioma.CATALA);
		$base._continguts.castella.provesacces = $base.xmlApProvesAcces.getIdioma(Idioma.CASTELLA);
		$base._continguts.angles.provesacces   = $base.xmlApProvesAcces.getIdioma(Idioma.ANGLES);
		
		//trace($base._continguts.catala.provesacces);
		$base.carregaXMLDirector();
	}
// ******************************************************************

// --- Apartat Director -----------------------------------------
	/**
	 * Carrega l'XML del apartat director i quan està carregat i parsejat es crida a directorCarregat
	 * 
	 * @see clases.dades.xml.XMLApGeneric
	 * @see directorCarregat()
	 */
	private function carregaXMLDirector():Void{
		xmlApDirector = new XMLApGeneric(PATH_XML + "director.xml", directorCarregat, this);
	}
	
	/**
	 * Ompla les dades d'idioma del apartat director a l'estructura _continguts quan les tenim disponibles
	 * 
	 * @see carregaXMLDirector()
	 * @param $base Referecia de la crida a la funció per poder accedir als metodes i parametres de la clase
	 */
	private function directorCarregat($base:MovieClip):Void{
		$base._continguts.catala.director   = $base.xmlApDirector.getIdioma(Idioma.CATALA);
		$base._continguts.castella.director = $base.xmlApDirector.getIdioma(Idioma.CASTELLA);
		$base._continguts.angles.director   = $base.xmlApDirector.getIdioma(Idioma.ANGLES);
		
		//trace($base._continguts.catala.director);
		$base.carregaXMLProfessorCant();
	}
// ******************************************************************

// --- Apartat Professor de Cant -----------------------------------------
	/**
	 * Carrega l'XML del apartat professor de cant i quan està carregat i parsejat es crida a professorCantCarregat
	 * 
	 * @see clases.dades.xml.XMLApGeneric
	 * @see professorCantCarregat()
	 */
	private function carregaXMLProfessorCant():Void{
		xmlApProfessorCant = new XMLApGeneric(PATH_XML + "profcant.xml", professorCantCarregat, this);
	}

	/**
	 * Ompla les dades d'idioma del apartat professor de cant a l'estructura _continguts quan les tenim disponibles
	 * 
	 * @see carregaXMLProfessorCant()
	 * @param $base Referecia de la crida a la funció per poder accedir als metodes i parametres de la clase
	 */
	private function professorCantCarregat($base:MovieClip):Void{
		$base._continguts.catala.professorcant   = $base.xmlApProfessorCant.getIdioma(Idioma.CATALA);
		$base._continguts.castella.professorcant = $base.xmlApProfessorCant.getIdioma(Idioma.CASTELLA);
		$base._continguts.angles.professorcant   = $base.xmlApProfessorCant.getIdioma(Idioma.ANGLES);
		
		//trace($base._continguts.catala.professorcant);
		
		$base.carregaXMLPortada();
	}
// *************************************************************

// --- Apartat Portada -----------------------------------------
	private function carregaXMLPortada():Void{
		xmlApPortada = new XMLApPortada(PATH_XML + "portada.xml", portadaCarregat, this);
	}

	private function portadaCarregat($base:MovieClip):Void{
		$base._continguts.catala.portada   = $base.xmlApPortada.getIdioma(Idioma.CATALA);
		$base._continguts.castella.portada = $base.xmlApPortada.getIdioma(Idioma.CASTELLA);
		$base._continguts.angles.portada   = $base.xmlApPortada.getIdioma(Idioma.ANGLES);
		
		//trace($base._continguts.catala.portada);
		
		$base.carregaXMLLinks();
	}
// ******************************************************************

// --- Apartat Portada -----------------------------------------
	private function carregaXMLLinks():Void{
		xmlApLinks = new XMLApLinks(PATH_XML + "links.xml", linksCarregat, this);
	}

	private function linksCarregat($base:MovieClip):Void{
		$base._continguts.links = $base.xmlApLinks.links;
		
		$base.ompleIdioma();
	}
// ******************************************************************

// PENDENT ** --- Apartat Galeria --------------------------------------------

// PENDENT ** --- Apartat Escolta'ns -----------------------------------------

	/**
	 * Es crida un cop carregats tots els apartats i menús per generar l'estructura definitiva
	 */
	private function ompleIdioma():Void{
		_idioma.push(_continguts.catala);
		_idioma.push(_continguts.castella);
		_idioma.push(_continguts.angles);
		
		_continguts = null;
		
		_cargaCompletada();
	}

	//-------------------------------------------
	
	/**
	 * getter de l'estructura on tenim els idiomes
	 * 
	 * @return Array
	 */
	public function get idioma():Array{
		return _idioma;
	}
}